<!DOCTYPE html>
<html class="writer-html5" lang="en" data-content_root="../../">
<head>
  <meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />

  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>logtalk_library_path/2 &mdash; The Logtalk Handbook v3.93.0-b01 documentation</title>
      <link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=d75fae25" />
      <link rel="stylesheet" type="text/css" href="../../_static/css/theme.css?v=19f00094" />
      <link rel="stylesheet" type="text/css" href="../../_static/css/custom.css?v=396eccfe" />

  
  <!--[if lt IE 9]>
    <script src="../../_static/js/html5shiv.min.js"></script>
  <![endif]-->
  
        <script src="../../_static/jquery.js?v=5d32c60e"></script>
        <script src="../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
        <script src="../../_static/documentation_options.js?v=c8100655"></script>
        <script src="../../_static/doctools.js?v=9a2dae69"></script>
        <script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
    <script src="../../_static/js/theme.js"></script>
    <!-- begin favicon -->
    <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" />
    <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png" />
    <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png" />
    <link rel="manifest" href="/site.webmanifest" />
    <link rel="mask-icon" href="/safari-pinned-tab.svg" color="#5bbad5" />
    <meta name="msapplication-TileColor" content="#355b95" />
    <meta name="theme-color" content="#ffffff" />
    <!-- end favicon -->
    
    <link rel="index" title="Index" href="../../genindex.html" />
    <link rel="search" title="Search" href="../../search.html" />
    <link rel="next" title="logtalk_load_context/2" href="logtalk_load_context_2.html" />
    <link rel="prev" title="logtalk_make_target_action/1" href="logtalk_make_target_action_1.html" />
   
</head>

<body class="wy-body-for-nav"> 
  <div class="wy-grid-for-nav">
    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
      <div class="wy-side-scroll">
        <div class="wy-side-nav-search" >

          
          
          <a href="../../index.html" class="icon icon-home">
            The Logtalk Handbook
              <img src="../../_static/logtalk.gif" class="logo" alt="Logo"/>
          </a>
              <div class="version">
                3.93.0
              </div>
<div role="search">
  <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
    <input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
    <input type="hidden" name="check_keywords" value="yes" />
    <input type="hidden" name="area" value="default" />
  </form>
</div>
        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
    
              <p class="caption" role="heading"><span class="caption-text">Contents</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../../userman/index.html">User Manual</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="../index.html">Reference Manual</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="../grammar.html">Grammar</a></li>
<li class="toctree-l2"><a class="reference internal" href="../control/index.html">Control constructs</a></li>
<li class="toctree-l2"><a class="reference internal" href="../directives/index.html">Directives</a></li>
<li class="toctree-l2 current"><a class="reference internal" href="index.html">Built-in predicates</a><ul class="current">
<li class="toctree-l3"><a class="reference internal" href="enumerating_entity_predicates.html">Enumerating objects, categories and protocols</a></li>
<li class="toctree-l3"><a class="reference internal" href="enumerating_entity_property_predicates.html">Enumerating objects, categories and protocols properties</a></li>
<li class="toctree-l3"><a class="reference internal" href="creating_entity_predicates.html">Creating new objects, categories and protocols</a></li>
<li class="toctree-l3"><a class="reference internal" href="abolishing_entity_predicates.html">Abolishing objects, categories and protocols</a></li>
<li class="toctree-l3"><a class="reference internal" href="entity_relation_predicates.html">Objects, categories, and protocols relations</a></li>
<li class="toctree-l3"><a class="reference internal" href="event_handling_predicates.html">Event handling</a></li>
<li class="toctree-l3"><a class="reference internal" href="multi_threading_predicates.html">Multi-threading</a></li>
<li class="toctree-l3"><a class="reference internal" href="engine_predicates.html">Multi-threading engines</a></li>
<li class="toctree-l3 current"><a class="reference internal" href="compiling_predicates.html">Compiling and loading source files</a><ul class="current">
<li class="toctree-l4"><a class="reference internal" href="logtalk_compile_1.html"><code class="docutils literal notranslate"><span class="pre">logtalk_compile/1</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="logtalk_compile_2.html"><code class="docutils literal notranslate"><span class="pre">logtalk_compile/2</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="logtalk_load_1.html"><code class="docutils literal notranslate"><span class="pre">logtalk_load/1</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="logtalk_load_2.html"><code class="docutils literal notranslate"><span class="pre">logtalk_load/2</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="logtalk_make_0.html"><code class="docutils literal notranslate"><span class="pre">logtalk_make/0</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="logtalk_make_1.html"><code class="docutils literal notranslate"><span class="pre">logtalk_make/1</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="logtalk_make_target_action_1.html"><code class="docutils literal notranslate"><span class="pre">logtalk_make_target_action/1</span></code></a></li>
<li class="toctree-l4 current"><a class="current reference internal" href="#"><code class="docutils literal notranslate"><span class="pre">logtalk_library_path/2</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="logtalk_load_context_2.html"><code class="docutils literal notranslate"><span class="pre">logtalk_load_context/2</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="flag_predicates.html">Flags</a></li>
<li class="toctree-l3"><a class="reference internal" href="linter_predicates.html">Linter</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../methods/index.html">Built-in methods</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../../tutorial/index.html">Tutorial</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../faq/index.html">FAQ</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../devtools/index.html">Developer Tools</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../libraries/index.html">Libraries</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../ports/index.html">Ports</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../contributions/index.html">Contributions</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../glossary.html">Glossary</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../bibliography.html">Bibliography</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../genindex.html">Index</a></li>
</ul>

    <p class="caption"><span class="caption-text">External Contents</span></p>
    <ul>
    <li class="toctree-l1"><a class="reference internal" href="../../../apis/index.html">APIs</a></li>
    <li class="toctree-l1"><a class="reference internal" href="https://logtalk.org">Logtalk website</a></li>
    <li class="toctree-l1"><a class="reference internal" href="https://github.com/LogtalkDotOrg/logtalk3">GitHub repo</a></li>
    </ul>
  
        </div>
      </div>
    </nav>

    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
          <a href="../../index.html">The Logtalk Handbook</a>
      </nav>

      <div class="wy-nav-content">
        <div class="rst-content">
          <div role="navigation" aria-label="Page navigation">
  <ul class="wy-breadcrumbs">
      <li><a href="../../index.html" class="icon icon-home" aria-label="Home"></a></li>
          <li class="breadcrumb-item"><a href="../index.html">Reference Manual</a></li>
          <li class="breadcrumb-item"><a href="index.html">Built-in predicates</a></li>
          <li class="breadcrumb-item"><a href="compiling_predicates.html">Compiling and loading source files</a></li>
      <li class="breadcrumb-item active"><code class="docutils literal notranslate"><span class="pre">logtalk_library_path/2</span></code></li>
      <li class="wy-breadcrumbs-aside">
              <a href="https://github.com/LogtalkDotOrg/logtalk3/blob/master/docs/handbook/sources/refman/predicates/logtalk_library_path_2.rst" class="fa fa-github"> Edit on GitHub</a>
      </li>
  </ul>
  <hr/>
</div>
          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
           <div itemprop="articleBody">
             
  <p class="align-right"><strong>built-in predicate</strong></p>
<section id="logtalk-library-path-2">
<span id="predicates-logtalk-library-path-2"></span><span id="index-0"></span><h1><code class="docutils literal notranslate"><span class="pre">logtalk_library_path/2</span></code><a class="headerlink" href="#logtalk-library-path-2" title="Link to this heading"></a></h1>
<section id="description">
<h2>Description<a class="headerlink" href="#description" title="Link to this heading"></a></h2>
<div class="highlight-logtalk notranslate"><div class="highlight"><pre><span></span><span class="k">logtalk_library_path</span>(<span class="nv">Library</span>, <span class="nv">Path</span>)
</pre></div>
</div>
<p>Dynamic and multifile user-defined predicate, allowing the declaration
of aliases to <a class="reference internal" href="../../glossary.html#term-library"><span class="xref std std-term">library</span></a> paths. Library aliases may also be used in
the second argument (using the notation <em>alias(path)</em>). Paths must always
end with the path directory separator character (<code class="docutils literal notranslate"><span class="pre">'/'</span></code>).</p>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<p>Library aliases should be unique. The <a class="reference internal" href="logtalk_make_1.html#predicates-logtalk-make-1"><span class="std std-ref">logtalk_make/1</span></a>
built-in predicate can be used to detect and report duplicated library
aliases using the <code class="docutils literal notranslate"><span class="pre">check</span></code> target.</p>
</div>
<p>Clauses for this predicate should preferably be facts. Defining rules to
dynamically compute at runtime both library alias names and their paths,
although sometimes handy, can inadvertently result in endless loops when
those rules also attempt to expand library paths. When asserting facts
for this predicate, use preferably <code class="docutils literal notranslate"><span class="pre">asserta/1</span></code> instead of <code class="docutils literal notranslate"><span class="pre">assertz/1</span></code>
to help ensure the facts will be used before any rules.</p>
<p>Relative paths (e.g., <code class="docutils literal notranslate"><span class="pre">'../'</span></code> or <code class="docutils literal notranslate"><span class="pre">'./'</span></code>) should only be used within
the <em>alias(path)</em>) notation so that library paths can always be expanded
to absolute paths independently of the (usually unpredictable) current
directory at the time the <code class="docutils literal notranslate"><span class="pre">logtalk_library_path/2</span></code> predicate is
called.</p>
<p>When working with a relocatable application, the actual application
installation directory can be retrieved by calling the
<a class="reference internal" href="logtalk_load_context_2.html#predicates-logtalk-load-context-2"><span class="std std-ref">logtalk_load_context/2</span></a> predicate with the <code class="docutils literal notranslate"><span class="pre">directory</span></code>
key and using the returned value to define the <code class="docutils literal notranslate"><span class="pre">logtalk_library_path/2</span></code>
predicate. On a <a class="reference internal" href="../../glossary.html#term-settings-file"><span class="xref std std-term">settings file</span></a> file or a <a class="reference internal" href="../../glossary.html#term-loader-file"><span class="xref std std-term">loader file</span></a> file,
simply use an <a class="reference internal" href="../directives/initialization_1.html#directives-initialization-1"><span class="std std-ref">initialization/1</span></a> directive to wrap the
call to the <code class="docutils literal notranslate"><span class="pre">logtalk_load_context/2</span></code> predicate and the assert of the
<code class="docutils literal notranslate"><span class="pre">logtalk_library_path/2</span></code> fact.</p>
<p>This predicate may be used to override the default <a class="reference internal" href="../../glossary.html#term-scratch-directory"><span class="xref std std-term">scratch directory</span></a>
by defining the library alias <code class="docutils literal notranslate"><span class="pre">scratch_directory</span></code> in a backend Prolog
initialization file (assumed to be loaded prior to Logtalk loading). This
allows e.g. Logtalk to be installed in a read-only directory by setting
this alias to the operating-system directory for temporary files. It also
allows several Logtalk instances to run concurrently without conflict by
using a unique scratch directory per instance (e.g., using a process ID or
a UUID generator).</p>
<p>This predicate may be used to override the default location used by the
<a class="reference internal" href="../../devtools/packs.html"><span class="doc">packs</span></a> tool to store registries and packs by defining
the <code class="docutils literal notranslate"><span class="pre">logtalk_packs</span></code> library alias in settings file or in a backend
Prolog initialization file (assumed to be loaded prior to Logtalk loading).</p>
<p>The <a class="reference internal" href="../../userman/objects.html#objects-logtalk"><span class="std std-ref">logtalk</span></a> built-in object provides an
<a class="reference external" href="../../../apis/logtalk_0.html#logtalk-0-expand-library-path-2" title="(in Logtalk APIs v3.93.0)"><span class="xref std std-ref">expand_library_path/2</span></a>
predicate that can be used to expand library aliases and files expressed
using library notation.</p>
</section>
<section id="modes-and-number-of-proofs">
<h2>Modes and number of proofs<a class="headerlink" href="#modes-and-number-of-proofs" title="Link to this heading"></a></h2>
<div class="highlight-logtalk notranslate"><div class="highlight"><pre><span></span><span class="k">logtalk_library_path</span>(<span class="o">?</span>atom, <span class="o">-</span>atom) <span class="o">-</span> zero_or_more
<span class="k">logtalk_library_path</span>(<span class="o">?</span>atom, <span class="o">-</span>compound) <span class="o">-</span> zero_or_more
</pre></div>
</div>
</section>
<section id="errors">
<h2>Errors<a class="headerlink" href="#errors" title="Link to this heading"></a></h2>
<p>(none)</p>
</section>
<section id="examples">
<h2>Examples<a class="headerlink" href="#examples" title="Link to this heading"></a></h2>
<div class="highlight-logtalk notranslate"><div class="highlight"><pre><span></span><span class="p">:- </span><span class="k">initialization</span>((
   <span class="k">logtalk_load_context</span>(directory, <span class="nv">Directory</span>),
   <span class="k">asserta</span>(<span class="k">logtalk_library_path</span>(my_application_root, <span class="nv">Directory</span>))
)).
</pre></div>
</div>
<div class="highlight-logtalk notranslate"><div class="highlight"><pre><span></span>| <span class="o">?-</span> <span class="k">logtalk_library_path</span>(viewpoints, <span class="nv">Path</span>).

<span class="nv">Path</span> <span class="o">=</span> examples(<span class="s">&#39;viewpoints/&#39;</span>)
yes

| <span class="o">?-</span> <span class="k">logtalk_library_path</span>(<span class="nv">Library</span>, <span class="nv">Path</span>).

<span class="nv">Library</span> <span class="o">=</span> home,
<span class="nv">Path</span> <span class="o">=</span> <span class="s">&#39;$HOME/&#39;</span> <span class="o">;</span>

<span class="nv">Library</span> <span class="o">=</span> logtalk_home,
<span class="nv">Path</span> <span class="o">=</span> <span class="s">&#39;$LOGTALKHOME/&#39;</span> <span class="o">;</span>

<span class="nv">Library</span> <span class="o">=</span> logtalk_user
<span class="nv">Path</span> <span class="o">=</span> <span class="s">&#39;$LOGTALKUSER/&#39;</span> <span class="o">;</span>

<span class="nv">Library</span> <span class="o">=</span> examples
<span class="nv">Path</span> <span class="o">=</span> logtalk_user(<span class="s">&#39;examples/&#39;</span>) <span class="o">;</span>

<span class="nv">Library</span> <span class="o">=</span> library
<span class="nv">Path</span> <span class="o">=</span> logtalk_user(<span class="s">&#39;library/&#39;</span>) <span class="o">;</span>

<span class="nv">Library</span> <span class="o">=</span> viewpoints
<span class="nv">Path</span> <span class="o">=</span> examples(<span class="s">&#39;viewpoints/&#39;</span>)
yes
</pre></div>
</div>
<div class="highlight-logtalk notranslate"><div class="highlight"><pre><span></span>| <span class="o">?-</span> logtalk<span class="o">::</span>expand_library_path(viewpoints, <span class="nv">Path</span>).

<span class="nv">Path</span> <span class="o">=</span> <span class="s">&#39;/Users/pmoura/logtalk/examples/viewpoints/&#39;</span>.
yes

| <span class="o">?-</span> logtalk<span class="o">::</span>expand_library_path(viewpoints(<span class="s">&#39;loader.lgt&#39;</span>), <span class="nv">Path</span>).

<span class="nv">Path</span> <span class="o">=</span> <span class="s">&#39;/Users/pmoura/logtalk/examples/viewpoints/loader.lgt&#39;</span>.
yes
</pre></div>
</div>
<div class="admonition seealso">
<p class="admonition-title">See also</p>
<p><a class="reference internal" href="logtalk_compile_1.html#predicates-logtalk-compile-1"><span class="std std-ref">logtalk_compile/1</span></a>,
<a class="reference internal" href="logtalk_compile_2.html#predicates-logtalk-compile-2"><span class="std std-ref">logtalk_compile/2</span></a>,
<a class="reference internal" href="logtalk_load_1.html#predicates-logtalk-load-1"><span class="std std-ref">logtalk_load/1</span></a>,
<a class="reference internal" href="logtalk_load_2.html#predicates-logtalk-load-2"><span class="std std-ref">logtalk_load/2</span></a></p>
</div>
</section>
</section>


           </div>
          </div>
          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
        <a href="logtalk_make_target_action_1.html" class="btn btn-neutral float-left" title="logtalk_make_target_action/1" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
        <a href="logtalk_load_context_2.html" class="btn btn-neutral float-right" title="logtalk_load_context/2" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
    </div>

  <hr/>

  <div role="contentinfo">
    <p>&#169; Copyright 1998-2025, Paulo Moura.</p>
  </div>

  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
    provided by <a href="https://readthedocs.org">Read the Docs</a>.
   

</footer>
        </div>
      </div>
    </section>
  </div>
  <script>
      jQuery(function () {
          SphinxRtdTheme.Navigation.enable(true);
      });
  </script> 

</body>
</html>